package net.uhuijia.user.userCartItem.service.impl;

import net.uhuijia.constants.DBConst;
import net.uhuijia.dao.param.UserCartItemParam;
import net.uhuijia.goods.goodsku.persistence.model.GoodSku;
import net.uhuijia.goods.goodspu.clientservice.GoodSpuClientService;
import net.uhuijia.goods.goodspu.persistence.model.GoodSpu;
import net.uhuijia.user.userCart.persistence.model.UserCart;
import net.uhuijia.user.userCart.service.UserCartService;
import net.uhuijia.user.userCartItem.service.UserCartItemService;
import net.uhuijia.user.usermall.persistence.model.UserMall;
import net.uhuijia.vo.cart.UserCartItemVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import net.uhuijia.appbase.service.CrudService;
import net.uhuijia.user.userCartItem.persistence.dao.UserCartItemDao;
import net.uhuijia.user.userCartItem.persistence.model.UserCartItem;
import net.uhuijia.user.userCartItem.persistence.model.UserCartItemExample;
import net.uhuijia.user.userCartItem.persistence.model.UserCartItemExample.Criteria;

import java.util.ArrayList;
import java.util.List;


@Service
@Transactional
public class UserCartItemServiceImpl
     extends CrudService<UserCartItemDao,UserCartItem,UserCartItemExample> implements UserCartItemService{
    @Autowired
    private UserCartItemDao userCartItemDao;
    @Autowired
    private GoodSpuClientService goodSpuClientService;
    @Autowired
    private UserCartService userCartService;
    /**
     * @Author xzj
     * @Description //查询用户购物车
     * @Date  2018/10/8
     * @Param
     * @return
     **/
    @Override
    public UserCartItem getUserCartItemByUserIdAndCartIdAndSkuId(String userId, String cartId, String skuId) {
        if(!StringUtils.isNoneBlank(userId,cartId,skuId))
            throw  new IllegalArgumentException();
        UserCartItem userCartItem = this.userCartItemDao.getUserCartItemByUserIdAndCartIdAndSkuId(new UserCartItemParam(userId,cartId,skuId));
        return userCartItem;
    }
    /**
     * @Author xzj
     * @Description //初始化购物车数据
     * @Date  2018/10/8
     * @Param
     * @return
     **/
    public UserCartItem generalUserCartItem(String userId, String cartId, String spuId, String skuId, int count){
        UserCartItem userCartItem = new UserCartItem();
        userCartItem.setCount(count);
        userCartItem.setCartId(cartId);
        userCartItem.setGoodId(spuId);
        userCartItem.setSkuId(skuId);
        userCartItem.setUserId(userId);
        return userCartItem;
    }
    /**
     * @Author xzj
     * @Description //添加购物车数据
     * @Date  2018/10/8
     * @Param
     * @return
     **/
    @Override
    public UserCartItem addUserCartItem(String userId, String cartId, String spuId, String skuId, int count) {
        UserCartItem userCartItem = this.generalUserCartItem(userId,cartId,spuId,skuId,count);
        this.add(userCartItem);
        return userCartItem;
    }
    /**
     * @Author xzj
     * @Description //根据购物车Id 查询购物车下的商品集合
     * @Date  2018/10/8
     * @Param
     * @return
     **/
    @Override
    public List<UserCartItem> findUserCartItemByCartId(String cartId) {
        UserCartItemExample example = new UserCartItemExample();
        Criteria criteria = example.createCriteria();
        criteria.andCartIdEqualTo(cartId);
        criteria.andIsEffectiveEqualTo(DBConst.TRUE);
        List<UserCartItem> userCartItems = this.list(example);
        return userCartItems;
    }
    /**
     * @Author xzj
     * @Description //根据购物车Id 查询购物车下的商品集合
     * @Date  2018/10/8
     * @Param
     * @return
     **/
    @Override
    public List<UserCartItemVo> findUserCartItemVoByCartId(String cartId) {
        List<UserCartItem> userCartItemList = this.findUserCartItemByCartId(cartId);
        List<UserCartItemVo> userCartItemVos = new ArrayList<>();
        for(UserCartItem userCartItem:userCartItemList){

            UserCartItemVo userCartItemVo = this.userCartItemWrapToUserCartItemVo(userCartItem);
            if(userCartItemVo!=null){
                userCartItemVos.add(userCartItemVo);
            }else
                continue;
        }
        return userCartItemVos;
    }
    /**
     * @Author xzj
     * @Description //将UserCartItem 转换成UserCartItemVo
     * @Date  2018/10/8
     * @Param
     * @return
     **/
    public UserCartItemVo userCartItemWrapToUserCartItemVo(UserCartItem userCartItem){
        UserCartItemVo userCartItemVo = new UserCartItemVo();
        userCartItemVo.setCount(userCartItem.getCount()==null?0:userCartItem.getCount().intValue());
        userCartItemVo.setCartItemId(userCartItem.getId());
        userCartItemVo.setSkuId(userCartItem.getSkuId());
        GoodSku goodSku = this.goodSpuClientService.getGoodSkuByGoodSkuId(userCartItem.getSkuId());
        if(goodSku!=null){
            GoodSpu goodSpu = this.goodSpuClientService.getGoodSpuBySpuId(goodSku.getGoodId());
            if(goodSpu!=null){
                userCartItemVo.setGoodName(goodSpu.getGoodName());
                userCartItemVo.setSpuId(goodSpu.getId());
                userCartItemVo.setPrice(goodSku.getPrice()==null?0:goodSku.getPrice());
                userCartItemVo.setPropertyName(goodSku.getShowSkuName());
                userCartItemVo.setSkuImage(goodSku.getImage());
                return userCartItemVo;
            }
        }
        return  null;
    }

    @Override
    public String delCartItem(UserMall userMall, String cartItemId) {
        String result = SUCCESS;
        UserCartItem userCartItem = this.get(cartItemId);
        if(userCartItem!=null){
            result = this.delete(userCartItem);
            List<UserCartItem> userCartItems = this.findUserCartItemByCartId(userCartItem.getCartId());
            if(userCartItems.isEmpty()){
                UserCart userCart = this.userCartService.get(userCartItem.getCartId());
                if(userCart!=null)
                    this.userCartService.delete(userCart);
            }

        }
        return result;
    }
}